// 引入 pinyin 库，用于将汉字转换为拼音
import pinyin from "pinyin"

// 定义一个函数，用于获取名字的首字母
function getFirstLetter(name: string) {
    // 尝试获取名字的首字母
    let firstLetter = name.toString().charAt(0).toUpperCase();
    // 如果是汉字，获取拼音首字母
    if (/[\u4e00-\u9fa5]/.test(firstLetter)) {
        firstLetter = pinyin(firstLetter, { style: pinyin.STYLE_NORMAL })[0][0].charAt(0).toUpperCase();
    }
    // 检查首字母是否在 A-Z 范围内
    if (/[A-Z]/.test(firstLetter)) {
        return firstLetter;
    } else {
        return null; // 如果不是 A-Z 范围内的字母，返回 null
    }
}

// 定义一个函数，用于对名字列表进行分类
export function classifyNames(friends: Array<String>) {
    const classifiedNames = {};
    friends.forEach(friend => {
        const firstLetter = getFirstLetter(friend.username);
        if (firstLetter) {
            if (!classifiedNames[firstLetter]) {
                classifiedNames[firstLetter] = [];
            }
            classifiedNames[firstLetter].push(friend);
        } else {
            if (!classifiedNames['#']) {
                classifiedNames['#'] = [];
            }
            classifiedNames['#'].push(friend);
        }
    });

    // 将分类结果转换为数组
    const result = [];
    for (let letter = 'A'; letter <= 'Z'; letter = String.fromCharCode(letter.charCodeAt(0) + 1)) {
        if (classifiedNames[letter]) {
            result.push({ letter, names: classifiedNames[letter] });
        }
    }

    // 添加无法识别的字符
    if (classifiedNames['#']) {
        result.push({ letter: '#', names: classifiedNames['#'] });
    }

    return result;
}